package com.ft.mybatis.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ft.core.domain.entities.IEntity;
import com.ft.core.function.Func_1;

import java.util.List;

/**
 * @copyright (C), 2015-2019, 梵途科技有限公司
 * @fileName: IMyBatisBaseService
 * @author: 李阳
 * @date: 2019/4/18 9:54
 * @description: 基于Mybatis-plus Service 层通用接口
 */
public interface IMyBatisBaseService<TEntity extends IEntity> extends IService<TEntity> {

    /**
     * 翻页查询
     *
     * @param pageIndex    页码
     * @param pageSize     页大小
     * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
     * @param uClass       目标类型
     */
    <U> IPage<U> page(long pageIndex, long pageSize, Wrapper<TEntity> queryWrapper, Class<U> uClass);


    /**
     * 翻页查询
     *
     * @param pageIndex    页码
     * @param pageSize     页大小
     * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
     * @param func         委托
     */
    <U> IPage<U> page(long pageIndex, long pageSize, Wrapper<TEntity> queryWrapper, Func_1<List<TEntity>,  List<U>> func);
}
